package cn.cdu.medical.service;

import com.baomidou.mybatisplus.extension.service.IService;
import cn.cdu.medical.entity.MedicalRecord;
import java.util.List;
import java.util.Map;

/**
 * 病历记录服务接口
 */
public interface MedicalRecordService extends IService<MedicalRecord> {
    
    /**
     * 根据问诊记录生成初始病历
     * @param consultationId 问诊ID
     * @return 病历记录
     */
    MedicalRecord generateInitialMedicalRecord(String consultationId);
    
    /**
     * 更新病历记录
     * @param record 病历记录
     * @return 更新后的病历记录
     */
    MedicalRecord update(MedicalRecord record);
    
    /**
     * 获取用户的病历列表
     * @param userId 用户ID
     * @return 病历列表
     */
    List<MedicalRecord> getUserMedicalRecords(String userId);
    
    /**
     * 获取医生的病历列表
     * @param doctorId 医生ID
     * @return 病历列表
     */
    List<MedicalRecord> getDoctorMedicalRecords(String doctorId);
    
    /**
     * 创建病历记录
     * @param record 病历记录
     * @return 创建的病历记录
     */
    MedicalRecord createMedicalRecord(MedicalRecord record);
    
    /**
     * 获取病历详情
     * @param id 病历ID
     * @return 病历记录
     */
    MedicalRecord getMedicalRecordDetail(String id);
    
    /**
     * 获取当前病历
     * @param orderId 挂号记录ID
     * @return 病历记录
     */
    MedicalRecord getCurrentMedicalRecord(String orderId);

    /**
     * 获取患者的历史病历列表
     * @param patientId 患者ID
     * @param doctorId 医生ID（可选）
     * @param deptName 科室名称（可选）
     * @return 病历列表
     */
    List<MedicalRecord> getPatientHistoryRecords(String patientId, String doctorId, String deptName);
    
    /**
     * 通过挂号记录ID查找或创建病历
     * @param orderId 挂号记录ID
     * @return 病历记录
     */
    MedicalRecord getOrCreateByOrderId(String orderId);
    
    /**
     * 获取患者的挂号-病历关联记录
     * @param patientId 患者ID
     * @return 关联记录列表
     */
    List<Map<String, Object>> getPatientOrderRecords(String patientId);
} 
 